#include<bits/stdc++.h>
using namespace std;
#define rep(x,y,z) for(int x=y;x<=z;x++)
int n,m;
vector<pair<int,int>>ans;
int main(){
    freopen("bishop.in","r",stdin);
    freopen("bishop.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m;
    bool flag=(n>m);
    if(n==1&&m==1){
        cout<<"1\n";
        cout<<"1 1\n";
        return 0;
    }
    if(n>m)swap(n,m);
    if(n&1){
        if(n==m){
            rep(i,2,n)ans.emplace_back(i,1);
            rep(i,2,n)ans.emplace_back(i,m);
        }else if(m==n+1){
            rep(i,1,n)ans.emplace_back(i,1);
            rep(i,1,n)ans.emplace_back(i,m);
        }else{
            rep(i,1,n)ans.emplace_back(i,1);
            rep(i,1,n)ans.emplace_back(i,m);
            int pos=n/2+2;
            rep(i,1,m-n-1)ans.emplace_back((n+1)/2,pos),pos++;
        }
    }else{
        if(n==m){
            rep(i,2,n)ans.emplace_back(i,1);
            rep(i,2,n)ans.emplace_back(i,m);
        }else if(m==n+1){
            rep(i,1,n)ans.emplace_back(i,1);
            rep(i,1,n)ans.emplace_back(i,m);
        }else if(m&1){
            rep(i,1,n)ans.emplace_back(i,1);
            rep(i,1,n)ans.emplace_back(i,m);
            int pos=n/2+2;
            rep(i,1,(m-n)/2){
                ans.emplace_back(n/2,pos);
                ans.emplace_back(n/2+1,pos);
                pos+=2;
            }
        }else{
            rep(i,2,n)ans.emplace_back(i,1);
            rep(i,2,n)ans.emplace_back(i,m);
            int pos=n/2+1;
            rep(i,1,m-n)ans.emplace_back(n/2+1,pos),pos++;
        }
    }
    cout<<(int)ans.size()<<"\n";
    for(auto x:ans){
        if(flag)swap(x.first,x.second);
        cout<<x.first<<" "<<x.second<<"\n";
    }
    return 0;
}
